home *** CD-ROM | disk | FTP | other *** search
- /*
- * xgc.c --
- *
- * This file contains generic routines for manipulating X graphics
- * contexts.
- *
- * Copyright (c) 1995 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- */
-
- static char sccsid[] = "@(#) xgc.c 1.3 95/08/24 09:43:29";
-
- #include <tk.h>
-
- #ifdef MAC_TCL
- # include <Xlib.h>
- #else
- # include <X11/Xlib.h>
- #endif
-
-
- /*
- *----------------------------------------------------------------------
- *
- * XCreateGC --
- *
- * Allocate a new GC, and initialize the specified fields.
- *
- * Results:
- * Returns a newly allocated GC.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
- GC
- XCreateGC(display, d, mask, values)
- Display* display;
- Drawable d;
- unsigned long mask;
- XGCValues* values;
- {
- GC gp;
-
- gp = (XGCValues *)ckalloc(sizeof(XGCValues));
- if (!gp) {
- return None;
- }
-
- gp->function = (mask & GCFunction) ?values->function :GXcopy;
- gp->plane_mask = (mask & GCPlaneMask) ?values->plane_mask :~0;
- gp->foreground = (mask & GCForeground) ?values->foreground :0;
- gp->background = (mask & GCBackground) ?values->background :0xffffff;
- gp->line_width = (mask & GCLineWidth) ?values->line_width :0;
- gp->line_style = (mask & GCLineStyle) ?values->line_style :LineSolid;
- gp->cap_style = (mask & GCCapStyle) ?values->cap_style :0;
- gp->join_style = (mask & GCJoinStyle) ?values->join_style :0;
- gp->fill_style = (mask & GCFillStyle) ?values->fill_style :FillSolid;
- gp->fill_rule = (mask & GCFillRule) ?values->fill_rule :WindingRule;
- gp->arc_mode = (mask & GCArcMode) ?values->arc_mode :ArcPieSlice;
- gp->tile = (mask & GCTile) ?values->tile :None;
- gp->stipple = (mask & GCStipple) ?values->stipple :None;
- gp->ts_x_origin = (mask & GCTileStipXOrigin) ?values->ts_x_origin:0;
- gp->ts_y_origin = (mask & GCTileStipYOrigin) ?values->ts_y_origin:0;
- gp->font = (mask & GCFont) ?values->font :None;
- gp->subwindow_mode = (mask & GCSubwindowMode)?values->subwindow_mode:ClipByChildren;
- gp->graphics_exposures = (mask & GCGraphicsExposures)?values->graphics_exposures:True;
- gp->clip_x_origin = (mask & GCClipXOrigin) ?values->clip_x_origin :0;
- gp->clip_y_origin = (mask & GCClipYOrigin) ?values->clip_y_origin :0;
- gp->clip_mask = (mask & GCClipMask) ?values->clip_mask :None;
- gp->dash_offset = (mask & GCDashOffset) ?values->dash_offset :0;
- gp->dashes = (mask & GCDashList) ?values->dashes :4;
-
- return gp;
- }
-
- /*
- *----------------------------------------------------------------------
- *
- * XFreeGC --
- *
- * Deallocates the specified graphics context.
- *
- * Results:
- * None.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
- void
- XFreeGC(d, gc)
- Display * d;
- GC gc;
- {
- if (gc != None) {
- ckfree((char *) gc);
- }
- }
-
- /*
- *----------------------------------------------------------------------
- *
- * XSetForeground, etc. --
- *
- * The following functions are simply accessor functions for
- * the GC slots.
- *
- * Results:
- * None.
- *
- * Side effects:
- * Each function sets some slot in the GC.
- *
- *----------------------------------------------------------------------
- */
-
- void
- XSetForeground(display, gc, foreground)
- Display *display;
- GC gc;
- unsigned long foreground;
- {
- gc->foreground = foreground;
- }
-
- void
- XSetBackground(display, gc, background)
- Display *display;
- GC gc;
- unsigned long background;
- {
- gc->background = background;
- }
-
- void
- XSetFunction(display, gc, function)
- Display *display;
- GC gc;
- int function;
- {
- gc->function = function;
- }
-
- void
- XSetFillRule(display, gc, fill_rule)
- Display *display;
- GC gc;
- int fill_rule;
- {
- gc->fill_rule = fill_rule;
- }
-
- void
- XSetFillStyle(display, gc, fill_style)
- Display *display;
- GC gc;
- int fill_style;
- {
- gc->fill_style = fill_style;
- }
-
- void
- XSetTSOrigin(display, gc, x, y)
- Display *display;
- GC gc;
- int x, y;
- {
- gc->ts_x_origin = x;
- gc->ts_y_origin = y;
- }
-
- void
- XSetArcMode(display, gc, arc_mode)
- Display *display;
- GC gc;
- int arc_mode;
- {
- gc->arc_mode = arc_mode;
- }
-
- void
- XSetStipple(display, gc, stipple)
- Display *display;
- GC gc;
- Pixmap stipple;
- {
- gc->stipple = stipple;
- }
-
- void
- XSetLineAttributes(display, gc, line_width, line_style, cap_style,
- join_style)
- Display *display;
- GC gc;
- unsigned int line_width;
- int line_style;
- int cap_style;
- int join_style;
- {
- gc->line_style = line_style;
- gc->cap_style = cap_style;
- gc->join_style = join_style;
- }
-
- void
- XSetClipMask(display, gc, pixmap)
- Display* display;
- GC gc;
- Pixmap pixmap;
- {
- gc->clip_mask = pixmap;
- }
-
- void
- XSetClipOrigin(display, gc, clip_x_origin, clip_y_origin)
- Display* display;
- GC gc;
- int clip_x_origin;
- int clip_y_origin;
- {
- gc->clip_x_origin = clip_x_origin;
- gc->clip_y_origin = clip_y_origin;
- }
-